An application programming interface (API) permits programmatic access to an application, and may be broadly described as a specification for how disparate entities (frequently software applications) are able to interact with each other. The interactions enabled by the API may include retrieval and update of application resources, which are accomplished via program code. An interface may be provided for the API such that a user is able to interact with the API manually in order to access application resources, or a client application may interact programmatically with the API. APIs are frequently used in the context of web service development.
When the Representational State Transfer (REST) architectural style is used to design API services on a network, such an API may be referred to as a REST API. A REST API describes a particular way for connecting distributed services on a network, and is constructed to follow a set of principles for web design. These design principles enable design of a robust, reliable, and scalable web application. The Hypertext Transfer Protocol/1.1 (HTTP/1.1) is typically used in an implementation of a REST API. There are many examples of web services that use REST design principles, and this architectural style is gaining popularity in cloud and software defined networking (SDN) applications in particular.
Conventionally, developing a client to interact with an API (e.g., a REST API) involves many programming steps. A software developer typically begins with a set of published documents on the particular service (e.g., a web service); the software developer must manually read the documentation, understand the architecture and interactions provided by the REST API for the service, and then write programs to interact with the service. The resulting end-product is specialized client code that interacts with one specific REST API in order to achieve a specific goal. This can be an arduous process, and the client code often cannot be used to achieve a different goal, and it may be difficult to upgrade following any changes to the REST API.